using UniversalAdmin.Domain.Entities;

namespace UniversalAdmin.Domain.Repositories;

public interface IPermissionRepository : IRepository<Permission>
{
    // 获取所有权限
    new Task<IEnumerable<Permission>> GetAllAsync();
    
    // 获取所有启用的权限
    Task<IEnumerable<Permission>> GetEnabledAsync();
    
    // 根据资源获取权限
    Task<IEnumerable<Permission>> GetByResourceAsync(string resource);
    
    // 检查权限是否被角色使用
    Task<bool> IsUsedByRolesAsync(Guid permissionId);
    
    // 根据角色获取权限
    Task<IEnumerable<Permission>> GetByRoleIdAsync(Guid roleId);
    
    // 获取权限树（按资源排序）
    Task<IEnumerable<Permission>> GetPermissionTreeAsync();
    
    // 批量更新权限状态
    Task BatchUpdateStatusAsync(List<Guid> permissionIds, bool isEnabled);
    
    // 获取权限统计信息
    Task<object> GetPermissionStatsAsync();
}